GtkThemingEngine: render square corner if the gap is too close on render_frame_gap()
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 24 Nov 2010 15:23:37 +0000 (16:23 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Sat, 4 Dec 2010 14:39:43 +0000 (15:39 +0100)
gtk/gtkthemingengine.c

index cff31cc325cc0be27f009a35720e65d0725e5e99..e5df624280e7c06354c200da8e15e3e02d9dc1f2 100644 (file)
@@ -2114,14 +2114,16 @@ gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine,
                                      gdouble           xy0_gap,
                                      gdouble           xy1_gap)
 {
-  GtkJunctionSides junction = 0;
+  GtkJunctionSides junction;
   GtkStateFlags state;
-  gint border_width;
+  gint border_width, radius;
   gdouble x0, y0, x1, y1, xc, yc, wc, hc;
 
   state = gtk_theming_engine_get_state (engine);
+  junction = gtk_theming_engine_get_junction_sides (engine);
   gtk_theming_engine_get (engine, state,
                           "border-width", &border_width,
+                          "border-radius", &radius,
                           NULL);
 
   cairo_save (cr);
@@ -2133,28 +2135,51 @@ gtk_theming_engine_render_frame_gap (GtkThemingEngine *engine,
       yc = y;
       wc = MAX (xy1_gap - xy0_gap - 2 * border_width, 0);
       hc = border_width;
-      junction = GTK_JUNCTION_TOP;
+
+      if (xy0_gap < radius)
+        junction |= GTK_JUNCTION_CORNER_TOPLEFT;
+
+      if (xy1_gap > width - radius)
+        junction |= GTK_JUNCTION_CORNER_TOPRIGHT;
       break;
     case GTK_POS_BOTTOM:
       xc = x + xy0_gap + border_width;
       yc = y + height - border_width;
       wc = MAX (xy1_gap - xy0_gap - 2 * border_width, 0);
       hc = border_width;
-      junction = GTK_JUNCTION_BOTTOM;
+
+      if (xy0_gap < radius)
+        junction |= GTK_JUNCTION_CORNER_BOTTOMLEFT;
+
+      if (xy1_gap > width - radius)
+        junction |= GTK_JUNCTION_CORNER_BOTTOMRIGHT;
+
       break;
     case GTK_POS_LEFT:
       xc = x;
       yc = y + xy0_gap + border_width;
       wc = border_width;
       hc = MAX (xy1_gap - xy0_gap - 2 * border_width, 0);
-      junction = GTK_JUNCTION_LEFT;
+
+      if (xy0_gap < radius)
+        junction |= GTK_JUNCTION_CORNER_TOPLEFT;
+
+      if (xy1_gap > height - radius)
+        junction |= GTK_JUNCTION_CORNER_BOTTOMLEFT;
+
       break;
     case GTK_POS_RIGHT:
       xc = x + width - border_width;
       yc = y + xy0_gap + border_width;
       wc = border_width;
       hc = MAX (xy1_gap - xy0_gap - 2 * border_width, 0);
-      junction = GTK_JUNCTION_RIGHT;
+
+      if (xy0_gap < radius)
+        junction |= GTK_JUNCTION_CORNER_TOPRIGHT;
+
+      if (xy1_gap > height - radius)
+        junction |= GTK_JUNCTION_CORNER_BOTTOMRIGHT;
+
       break;
     }